package util.benchmark;

/**
 * 计时器
 * @author aleck
 *
 */
public class Clock {
	private long count = 0;
	private long totalTime = 0;
	private long timeStart;
	private boolean inProccess = false;
	
	Clock() {
	}
	
	/**
	 * 开始计时
	 */
	public void start() {
		reset();
	}
	
	/**
	 * 暂停，如果已经暂停则仍然保持暂停状态
	 */
	public void pause() {
		if (inProccess) {
			totalTime += System.currentTimeMillis() - timeStart;
			inProccess = false;
		}
	}
	
	/**
	 * 继续计时
	 */
	public void cont() {
		if (!inProccess) {
			timeStart = System.currentTimeMillis();
			inProccess = true;
		}
	}
	
	/**
	 * 清零
	 */
	public void reset() {
		count = 0;
		totalTime = 0;
		timeStart = System.currentTimeMillis();
		inProccess = true;
	}
	
	/**
	 * 计数器加1
	 */
	public void inc() {
		count++;
	}

	/**
	 * 获取计数器的值
	 * @return
	 */
	public long getCount() {
		return count;
	}
	
	/**
	 * 获取计时器的时间，如果正在计时则返回实时的结果
	 * @return
	 */
	public long getTotalTime() {
		if (inProccess)
			return totalTime + System.currentTimeMillis() - timeStart;
		else 
			return totalTime;
	}
}
